SPSS 转换命令快速入门

作者: Ruben Geert van den Berg

SPSS 中的转换命令(SPSS transformation commands),或者简称为“转换”(transformations),可以粗略地定义为当你运行它们时不会立即执行的命令。相反,SPSS 会记住这些命令,并在必要时才执行。下表概述了 SPSS 的主要转换命令。

SPSS 主要转换命令

命令名称 (Command Name) 目标 (Goal) 典型用法 (Typical usage)
COMPUTE 创建变量 (Create variable) 非常频繁 (Very frequently)
RECODE 创建变量 (Create variable) 非常频繁 (Very frequently)
IF 创建变量 (Create variable) 非常频繁 (Very frequently)
COUNT 创建变量 (Create variable) 有时 (Sometimes)
SELECT IF 删除个案 (Delete cases) 非常频繁 (Very frequently)
SAMPLE 删除个案 (Delete cases) 非常少 (Very rarely)
DO IF 控制其他转换 (Control other transformations) 有时 (Sometimes)
DO REPEAT 控制其他转换 (Control other transformations) 频繁 (Frequently)
LOOP 控制其他转换 (Control other transformations) 有时 (Sometimes)
TEMPORARY 控制其他转换 (Control other transformations) 频繁 (Frequently)
LEAVE 控制其他转换 (Control other transformations) 非常少 (Very rarely)
ADD FILES 合并数据 (Merge data) 有时 (Sometimes)
MATCH FILES 合并数据 (Merge data) 有时 (Sometimes)
UPDATE 合并数据 (Merge data) 非常少 (Very rarely)
DATA LIST 定义新数据 (Define new data) 少 (Rarely)
INPUT PROGRAM 定义新数据 (Define new data) 非常少 (Very rarely)
WRITE 创建数据文件 (Create data file) 非常少 (Very rarely)
XSAVE 创建数据文件 (Create data file) 非常少 (Very rarely)

SPSS 转换暂挂 (SPSS Transformations Pending)

为了更好地理解 SPSS 转换是什么,让我们运行一个。例如,让我们打开 age_income.sav 文件,并使用 COMPUTE 命令将年度收入计算为 income * 12。我们将通过运行以下 语法 (syntax) 来实现:

compute yearly_income = income * 12.

运行命令后,生成的新变量似乎在数据视图 (data view) 中只包含 系统缺失值 (system missing values)。结果如下图所示。

SPSS 转换暂挂

请注意状态栏中的消息 “Transformations pending”(转换暂挂)。 SPSS 知道你运行了一个或多个转换,并且它会记住这些转换,直到实际需要执行它们。

SPSS 过程 (SPSS Procedures)

现在,让我们通过运行以下命令对我们的新变量运行一些基本的 DESCRIPTIVES

descriptives yearly_income.

不出所料,我们现在在 输出查看器窗口 (output viewer window) 中看到,30 名受访者的平均年度收入为 € 30013,-。 也许更令人惊讶的是,yearly_income 的值现在出现在数据视图中,“Transformations pending”(转换暂挂)已消失。

SPSS 转换已执行

显然,运行 DESCRIPTIVES 导致了我们暂挂转换的执行。 执行暂挂转换的命令在 SPSS 中统称为“过程 (procedures)”。 请记住,在 SPSS 中,“过程 (procedure)” 的含义与普通语言中的含义不同。 一个特殊的例子是 EXECUTE,它除了执行暂挂的转换之外什么也不做。

为什么 SPSS 不在转换运行时立即执行它们? 根本原因在于这样做会使 SPSS 变慢,尤其是在包含大量个案的数据中。 这也意味着在不必要时使用 EXECUTE 会使你的语法变慢,尽管在现代计算机上,这种差异可能只有在大型数据集上才能注意到。

SPSS 转换 - 为什么要关注?

为什么要关心命令是转换、过程还是其他 SPSS 命令? 根本原因在于一些重要的 SPSS 命令只能与转换结合使用,而不能与过程结合使用

例如,如果你尝试将 DESCRIPTIVES 放在 LOOP 中,你只会触发一个错误。

SPSS 转换已执行

原因是 DESCRIPTIVES 是一个过程,你只能在 LOOP 中使用转换。 了解转换、过程和其他 SPSS 命令之间的区别可以避免此类错误以及它们在 SPSS 用户中引起的困惑。 也可以循环执行过程,但不能使用 LOOPDO REPEAT 命令。 相反,应该使用 Python多个因变量的回归分析 (Regression over Many Dependent Variables) 中展示了一个例子。

我们之前看到的概述中提供了一个不能与过程结合使用的命令列表。 它们被标记为“控制其他_转换_”。 TEMPORARY 不限于转换,但有关此的详细信息超出了本教程的范围。

SPSS 转换测试

好的,像 DO IFDO REPEAT 这样的命令只能与转换结合使用。 但是你如何知道给定的命令是否是转换? 一种方法是,命令语法参考 (command syntax reference, CSR) 指示每个命令是转换、过程还是其他命令。 例如,下面的文本表示一个转换。

SPSS CSR 中的转换

由于许多 SPSS 用户发现 CSR “难以理解”,因此另一种选择是简单地尝试:运行单个命令,看看它是否触发 “Transformations pending”(转换暂挂)通知。

当然,这种反复试验最初会花费一些精力。 但是,熟能生巧; 最终,弄清楚事物的工作方式将比花费的时间节省更多的时间。